#ifndef EVENTS_H_
#define EVENTS_H_

#include "enums.h"
#include "containerWrapper.h"

//Class inclusion, to prevent cyclical dependecies

struct Event
{
	EventTypes eventType;
	BehaviourTypes* responses = 0;
	int numberOfResponses;

	~Event()
	{
		delete responses;
	}
};

struct enemyEntersRadius_e : public Event
{
	Vector3D* enemyIncomingVector;

	enemyEntersRadius_e(float x, float y, float z){ 
		enemyIncomingVector = new Vector3D(x, y, z); 
		eventType = EventTypes::enemyEntersRadius; 

		numberOfResponses = 1;
		responses = new BehaviourTypes[numberOfResponses]();
		responses[0] = BehaviourTypes::FLEE;
	}

	~enemyEntersRadius_e()
	{ 
		delete enemyIncomingVector; 
	}
};

struct shootsAt_e : public Event
{
	Vector3D* enemyIncomingVector;

	shootsAt_e(float x, float y, float z){ 
		enemyIncomingVector = new Vector3D(x, y, z); 
		eventType = EventTypes::shootsAt; 
	
		numberOfResponses = 1;
		responses = new BehaviourTypes[numberOfResponses]();
		responses[0] = BehaviourTypes::ATTACK;
	}

	~shootsAt_e(){ delete enemyIncomingVector;}
};

#endif